package Util;

import java.io.*;
import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;

public class Echo extends DefaultHandler {

    static private Writer out;

    public Echo() {
    }

    public void main(String argv[]) {
       /* if (argv.length != 1) {
            System.err.println("Usage: cmd filename");
            System.exit(1);
        }*/

        // Use uma instancia de Echo como o SAX EventHandler
        DefaultHandler handler = new Echo();

        // Usa o parser SAX  default (sem valida��o)
        SAXParserFactory factory = SAXParserFactory.newInstance();

        try {
            // Configura a sa�da
            out = new OutputStreamWriter(System.out, "UTF8");
            // Processa a entrada
            SAXParser saxParser = factory.newSAXParser();
            saxParser.parse("TesteXML.xml", handler);

        } catch (Throwable t) {
            t.printStackTrace();
        }
        System.exit(0);
    }


    /* O c�digo que segue implementa alguns m�todos auxiliares para a apresenta��o do documento. 
     S�o eles, o m�todo emit que apresenta uma string s na sa�da out e 
     o m�todo nl que imprime uma mudan�a de linha em out.
     */
    private void emit(String s)
            throws SAXException {
        try {
            out.write(s);
            out.flush();
        } catch (IOException e) {
            throw new SAXException("I/O error", e);
        }
    }

    private void nl()
            throws SAXException {
        String lineEnd = System.getProperty("line.separator");
        try {
            out.write(lineEnd);

        } catch (IOException e) {
            throw new SAXException("I/O error", e);
        }
    }

    /* A seguir temos as implementa��es dos m�todos startdocument, enddocument, starelement e 
     endelement definidos na interface DefaultHandler.
     */
    public void startDocument()
            throws SAXException {
        //   emit("<?xml version='1.0' encoding='UTF-8'?>");
        nl();
    }

    public void endDocument()
            throws SAXException {
        try {
            nl();
            out.flush();
        } catch (IOException e) {
            throw new SAXException("I/O error", e);
        }
    }

    public void startElement(String namespaceURI,
            String sName, // simple name (localName)
            String qName, // qualified name
            Attributes attrs)
            throws SAXException {
        String eName = sName; // element name
        if ("".equals(eName)) {
            eName = qName; // namespaceAware = false
        }
        emit("<" + eName);
        if (attrs != null) {
            for (int i = 0; i < attrs.getLength(); i++) {
                String aName = attrs.getLocalName(i); // Attr name
                if ("".equals(aName)) {
                    aName = attrs.getQName(i);
                }
                emit(" ");
                emit(aName + "=\"" + attrs.getValue(i) + "\"");
            }
        }
        emit(">");
    }

    public void endElement(String namespaceURI,
            String sName, // simple name
            String qName // qualified name
            )
            throws SAXException {
        emit("</" + sName + ">");
    }

    public void characters(char buf[], int offset, int len)
            throws SAXException {
        String s = new String(buf, offset, len);
        emit(s);
    }
}
